package com.communism;


import org.apache.commons.lang3.StringUtils;

import java.sql.*;
import java.util.HashMap;
import java.util.Map;

/**
 * @author wangqinmin
 * @date 2023/4/9 10:33
 * @description: 共产主义接班人
 */
public class First {

    static Connection conn;

    /**
     * >按照上面的思路，需要写几个类，分别封装上面的属性
     * > 1. DataSourceCommunism
     * > 2. GlobalConfigCommunism
     * > 3. SetTemplatePropertiesCommunism
     * > 4. TemplateBaseInfoCommunism
     * > 5. 在第3点中，包名也算是 自定义设置属性中的一员，就先不写这个类了
     * > 6. 在第4点中，既然已经设置了模版路径，干脆一起把要生成的模版路径，也当作属性，写在这里面了。
     * > 7. TableInfoCommunism 主要就是存储表信息的。包括字段名，字段类型，字段注释，表注释 等等
     * > 8. 岂不是要用到策略设计模式 ？ 研究一下...
     * > 9. GeneratorCommunism 开始调用 模版 生成文件。
     * > com.communism.core 中主要写上面这些类，主要就是定义属性
     * > com.communism.core 中主要写上面这些类，需要设置的属性
     * > com.communism.run 就一个run方法用作执行
     */
    public static void main(String[] args) {
//        Map<String, Object> dataSource = new HashMap<>();
//        dataSource.put("driverName", );
//        dataSource.put("url", );
//        dataSource.put("username", );
//        dataSource.put("password", );

        String databaseTableName = "example";

        Map<String, Object> template = new HashMap<>();
        String basePath = "/Users/wangqinmin/code/java/javacode/edit/20230325/communism/communism-code-generator/src/main/java/hello/";
        template.put("entity", new String[]{"/templates/entity.java.vm", basePath + "%Entity.java"});


        String tables = "show table status WHERE 1=1  AND NAME IN ('%s')";
        tables = String.format(tables, databaseTableName);

        try {
            PreparedStatement preparedStatement = conn.prepareStatement(tables);
            ResultSet results = preparedStatement.executeQuery();
            while (results.next()) {
                // 表名
                final String tableName = results.getString("NAME");
//                if (ObjectUtils.isEmpty(tableName)) {
//                    System.err.println("当前数据库为空！！！");
//                    continue;
//                }
                // 表备注
                String tableComment = results.getString("COMMENT");
                String formatComment = formatComment(tableComment);
                // 表字段
                String tableFieldsSql = "show full fields from `%s`";
                tableFieldsSql = String.format(tableFieldsSql, tableName);

                PreparedStatement preparedStatement1 = conn.prepareStatement(tableFieldsSql);
                ResultSet results1 = preparedStatement.executeQuery();
                while (results.next()) {
                    String columnName = results1.getString("FIELD");
                }


            }
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

    /**
     * 格式化数据库注释内容
     *
     * @param comment 注释
     * @return 注释
     * @since 3.4.0
     */
    public static String formatComment(String comment) {
//        return comment.length() == 0 ? "" : comment.replaceAll("\r\n", "\t");
//         return StringUtils.isBlank(comment) ? StringPool.EMPTY : comment.replaceAll("\r\n", "\t");
         return StringUtils.isBlank(comment) ? "" : comment.replaceAll("\r\n", "\t");
    }

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:33061/mybatis-generator?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "wangqinmin");
        } catch (ClassNotFoundException | SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
